Node.js 的内置模块出了前面详细介绍的一些高频常用模块外,还存在许多其它的模块 (日常直接使用频率相对低一点)。
这一节挑选了如下 4 个模块进行简单介绍 URL,Timers,Readline,Crypto。
url.parse
解析 URL 字符串,返回一个解析后的对象。
```js import url from 'url'
const testUrl = 'https://www.baidu.com?search=juejin' console.log(url.parse(testUrl)) ```
url.URL
和全局的 URL
一样,创建一个 URL 实例,提供许多开箱即用的操作。
```js import url from 'url'
const testUrl = 'https://www.baidu.com?search=juejin' console.log('url.URL === URL', url.URL === URL) console.log(new URL(testUrl)) ```
其中 searchParams
提供了可直接操作查询参数的一些方法。
定时器相关方法。
| 方法名 | 描述 |
| ----------------------------------------- | ----------------------------- |
| setTimeout(callback, delay[, ...args])
| 在 delay
毫秒之后执行一次 callback
|
| setInterval(callback, delay[, ...args])
| 每隔 delay
毫秒执行一次 callback
|
| setImmediate(callback[, ...args])
| 在当前事件循环的下一个阶段执行 callback
|
| process.nextTick(callback[, ...args])
| 在当前事件循环结束后立即执行 callback
|
示例代码如下。
js
setImmediate(() => console.log('setImmediate'))
setTimeout(() => console.log('setTimeout'), 0)
process.nextTick(() => console.log('nextTick'))
setInterval(() => console.log('setInterval'), 1000)
在 Node.js 中,readline
模块提供了一个接口,用于从可读流 (例如 process.stdin
) 读取数据,并支持逐行读取数据。
下面是几个例子:
① 使用 question()
方法向用户询问姓名并显示。
```js import readline from 'readline'
const rl = readline.createInterface({ input: process.stdin, output: process.stdout })
rl.question('What is your name? ', (name) => {
console.log(Hello, ${name}!
)
rl.close()
})
```
② 使用 write()
方法向标准输出发送数据。
```js import readline from 'readline'
const rl = readline.createInterface({ input: process.stdin, output: process.stdout })
rl.write('Hello, World!\n') rl.close() ```
③ 实现一个可多轮对话的命令行
```js const rl = readline.createInterface({ input: process.stdin, // 从标准输入流中读取数据 output: process.stdout // 输出数据到标准输出流中 })
rl.setPrompt('node> ') // 设置提示符 rl.prompt() // 显示提示符
rl.on('line', (line) => {
// 监听行事件
switch (
line.trim() // 去除收尾空白字符,进行简单的命令选择判断
) {
case 'hello':
console.log('world') // 输出 'world'
break
case 'exit':
rl.close() // 关闭 readline 接口
break
default:
console.log(Say what? I might have heard '${line.trim()}'
) // 输出收到的指令
break
}
rl.prompt() // 显示提示符
})
rl.on('close', () => { // 监听关闭事件 console.log('Goodbye!') // 输出 'Goodbye!' process.exit(0) // 退出 Node.js 进程 }) ```
crypto
模块主要用于加密和解密数据,内置了一些常用的算法。
下面介绍一下 3 个常见用法 哈希值生成
,加解密
,随机数生成
。
使用 crypto.createHash(algorithm)
:创建一个新的哈希算法实例,其中 algorithm
是一个支持的哈希算法名称,例如 sha256
和 md5
等
hash.update(data[, inputEncoding])
:更新哈希运算所使用的数据hash.digest([encoding])
:计算并返回哈希值。如果提供了 encoding
参数,则返回字符串形式的哈希值;否则返回一个 Buffer
对象```js import crypto from 'crypto'
const testStr = 'hello world' const sha256 = crypto.createHash('sha256').update(testStr).digest('hex') console.log(sha256)
const md5 = crypto.createHash('md5').update(testStr).digest('hex') console.log(md5)
const sha512 = crypto.createHash('sha512').update(testStr).digest('hex') console.log(sha512) ```
crypto.createCipheriv
方法用于创建一个使用指定算法和密钥进行加密的 Cipher
对象,并指定初始化向量 iv
。
```js import crypto from 'crypto'
// 定义加密算法和密钥,生成随机密码和向量 const algorithm = 'aes-256-cbc' const password = crypto.randomBytes(32) // 生成随机 32 字节的密码 const iv = crypto.randomBytes(16) // 生成随机 16 字节的向量
// 待加密的数据 const data = 'Hello, World!' console.log('Original data:', data)
// 创建加密算法实例 const cipher = crypto.createCipheriv(algorithm, password, iv)
// 使用 update 方法对数据进行加密 let encrypted = cipher.update(data, 'utf8', 'hex') // 加密后的数据以十六进制形式(即字符串)返回 encrypted += cipher.final('hex')
console.log('Encrypted data:', encrypted)
// 创建解密算法实例 const decipher = crypto.createDecipheriv(algorithm, password, iv)
// 使用 update 方法对数据进行解密 let decrypted = decipher.update(encrypted, 'hex', 'utf8') // 返回解密后的字符串 utf8编码 decrypted += decipher.final('utf8')
console.log('Decrypted data:', decrypted) ```
crypto.randomBytes(size[, callback])
:生成具有给定大小的随机数据 (Buffer
类型)。
js
console.log(crypto.randomBytes(32).toString('hex'))
console.log(crypto.randomBytes(8).toString('hex'))
本节主要介绍了如下 4 个内置模块的简单用法:
当然 Node 中的内置模块远不如此,其它的推荐大家在日后开发中按需查阅文档进行使用。